// 设置指定商品价格的脚本
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();

// 获取命令行参数
const args = process.argv.slice(2);
if (args.length < 2) {
  console.log('使用方法: node set-product-price.js <商品名称> <价格>');
  console.log('例如: node set-product-price.js "世涛黑啤" 1');
  process.exit(1);
}

const productName = args[0];
const price = parseFloat(args[1]);

if (isNaN(price)) {
  console.log('错误: 价格必须是一个数字');
  process.exit(1);
}

async function setProductPrice() {
  try {
    console.log(`开始设置商品 "${productName}" 的价格为 ${price} 元...`);
    
    // 1. 查找商品
    const product = await prisma.product.findFirst({
      where: {
        name: productName
      }
    });
    
    if (!product) {
      console.log(`未找到商品 "${productName}"，请检查商品名称`);
      return;
    }
    
    console.log(`找到商品: ${product.name} (ID=${product.id})`);
    
    // 2. 查找所有渠道
    const channels = await prisma.channel.findMany({
      where: {
        status: true
      }
    });
    
    console.log(`找到 ${channels.length} 个渠道`);
    
    // 3. 设置商品在所有渠道的价格
    for (const channel of channels) {
      // 检查是否已存在价格记录
      const existingPrice = await prisma.productPrice.findUnique({
        where: {
          productId_channelId: {
            productId: product.id,
            channelId: channel.id
          }
        }
      });
      
      if (existingPrice) {
        // 更新现有价格记录
        await prisma.productPrice.update({
          where: {
            productId_channelId: {
              productId: product.id,
              channelId: channel.id
            }
          },
          data: {
            price: price,
            discount: 1
          }
        });
        console.log(`已更新商品在渠道 ${channel.name} (ID=${channel.id}) 的价格: ${existingPrice.price} -> ${price} 元`);
      } else {
        // 创建新的价格记录
        await prisma.productPrice.create({
          data: {
            productId: product.id,
            channelId: channel.id,
            price: price,
            discount: 1
          }
        });
        console.log(`已创建商品在渠道 ${channel.name} (ID=${channel.id}) 的价格: ${price} 元`);
      }
    }
    
    // 4. 验证价格设置
    const updatedPrices = await prisma.productPrice.findMany({
      where: {
        productId: product.id
      }
    });
    
    console.log('\n商品的最新价格设置:');
    for (const price of updatedPrices) {
      const channel = await prisma.channel.findUnique({
        where: { id: price.channelId }
      });
      
      console.log(`- 渠道: ${channel?.name || '未知'} (ID=${price.channelId}), 价格: ${price.price} 元`);
    }
    
    console.log(`\n商品 "${productName}" 价格设置完成`);
  } catch (error) {
    console.error('设置商品价格出错:', error);
  } finally {
    await prisma.$disconnect();
  }
}

// 执行设置
setProductPrice(); 